#include "MainWindowForm.h"
#include "./kod/Zarejestrowany.h"
#include  <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QList>
#define DRIVER "QSQLITE"
#define DATABASE "./media.db"
#define HOST ""
#define USER ""
#define PASSWORD ""

MainWindowForm::MainWindowForm(QWidget *parent, Zarejestrowany *user):QDialog(parent)
{	
	loginForm=parent;
	if (parent) parent->hide();
	setupUi(this);
	connect(addButton,SIGNAL(clicked()),this,SLOT(addToKoszyk()));	//jeśli ktoś naciśnie na + to dodaje zaznaczony wiersz
	connect(koszykButton,SIGNAL(clicked()),this,SLOT(showKoszyk()));
	connect(produktTableWidget,SIGNAL(cellClicked(int, int )),this,SLOT(rowActivate(int,int)));
	connect(exitButton,SIGNAL(clicked()),this,SLOT(exit()));

	currUser=user;
	koszykForm=0;
	produktTableWidget->setShowGrid(true);
	produktTableWidget->setColumnCount(4);
	QStringList temp;
	temp<< "Nazwa" << "Rozmiar(MB) "<< "Cena" << "Znizka";
	produktTableWidget->setHorizontalHeaderLabels(temp);
	produktTableWidget->setRowCount(10);
	readProducts();
	showKoszyk();
}

Uzytkownik *MainWindowForm::getCurrentUser(){
		return currUser;
}

void MainWindowForm::setCurrentUser(Uzytkownik *user){
		currUser=user;
}

void MainWindowForm::readProducts(){
 	QSqlDatabase db = QSqlDatabase::addDatabase( DRIVER );
    	db.setDatabaseName( DATABASE );
	    db.setUserName( USER );
	    db.setPassword( PASSWORD );
	    db.setHostName( HOST );
	

	if 	(!db.open()) {printf("Nie udało się otworzyć bazy danych");
			return ;
	}
	else printf("Połączono się z bazą\n");

	int count;
	QSqlQuery query;
	query.exec("SELECT COUNT(*) FROM PRODUKTY");
	query.first();
	count=query.value(0).toInt();
	produktTableWidget->setRowCount(count); //tyle wierszy ile wyników


	query.exec("SELECT p.nrp, p.nazwa, p.rozmiar, p.cena, pr.znizka FROM produkty p LEFT OUTER JOIN promocje pr ON p.nrp=pr.nrp");
QTableWidgetItem *item;
Qt::ItemFlags flags;
int wiersz=0;
int znizka;

while (query.next()){
		QString znizkatext;
		QString nazwa=query.value(1).toString();
		int cena=query.value(3).toInt();
		int rozmiar=query.value(2).toInt();
		if (query.value(4).isNull()) znizka=0;
		else znizka=query.value(4).toInt();
		if (znizka) znizkatext=QString::number(znizka);
		else znizkatext="";


		item=produktTableWidget->item(wiersz,0);
		if (!item) item=new QTableWidgetItem(nazwa);
		item->setText(nazwa);
		flags=item->flags();
		flags&=(~Qt::ItemIsEditable);
		item->setFlags(flags);
		produktTableWidget->setItem(wiersz,0,item);
		item->setData(Qt::UserRole,query.value(0));	//zapisanie pod nazwą dodatkowego adtrybutu (identyfikatora)


		item=produktTableWidget->item(wiersz,1);
		if (!item) item=new QTableWidgetItem;
		item->setText(QString::number(rozmiar));
		flags=item->flags();
		flags&=(~Qt::ItemIsEditable);
		item->setFlags(flags);
		produktTableWidget->setItem(wiersz,1,item);




		item=produktTableWidget->item(wiersz,2);
		if (!item) item=new QTableWidgetItem;
		item->setText(QString::number(cena));
		flags=item->flags();
		flags&=(~Qt::ItemIsEditable);
		item->setFlags(flags);
		produktTableWidget->setItem(wiersz,2,item);


		item=produktTableWidget->item(wiersz,3);
		if (!item) item=new QTableWidgetItem;
		item->setText(znizkatext);
		flags=item->flags();
		flags&=(~Qt::ItemIsEditable);
		item->setFlags(flags);
		produktTableWidget->setItem(wiersz,3,item);

		wiersz++;	
	}
	produktTableWidget->resizeColumnsToContents();
	db.close();
}

void MainWindowForm::showKoszyk(){
		if (!koszykForm) koszykForm=new KoszykForm(this,currUser);
		currKoszyk=koszykForm->getKoszyk();
		koszykForm->show();
}

void MainWindowForm::addToKoszyk(){
	QList<QTableWidgetItem *> selected=produktTableWidget->selectedItems();
	int row=0;
	int column=0;
	for (QList<QTableWidgetItem *>::iterator it=selected.begin();it!=selected.end();it++){
			if (it==selected.begin()) {
				row=(*it)->row();
				column=(*it)->column();
			}
			(*it)->setSelected(false);
	}
	for (int i=0;i<produktTableWidget->columnCount();i++)	//zaznaczenie całego wiersza
			produktTableWidget->item(row,i)->setSelected(true);
	
	
	Produkt *produkt=new Produkt();
	produkt->setId(produktTableWidget->item(row,0)->data(Qt::UserRole).toInt());
	produkt->setNazwa(produktTableWidget->item(row,0)->text().toStdString());
	produkt->setRozmiar(produktTableWidget->item(row,1)->text().toInt());
	double cena=produktTableWidget->item(row,2)->text().toDouble();
	double znizka=produktTableWidget->item(row,3)->text().toDouble();
	produkt->setCena(cena - (znizka/100.0)*cena);

	currKoszyk->dodajProdukt(produkt);
	if (koszykForm)	koszykForm->updateList();

}
void MainWindowForm::rowActivate(int row,int column){
	QList<QTableWidgetItem *> selected=produktTableWidget->selectedItems();
	for (QList<QTableWidgetItem *>::iterator it=selected.begin();it!=selected.end();it++){
		(*it)->setSelected(false);
	}
	for (int i=0;i<produktTableWidget->columnCount();i++) {
			QTableWidgetItem *item=produktTableWidget->item(row,i);
			if (!item) item=new QTableWidgetItem;
			item->setSelected(true);
	}
}

void MainWindowForm::exit(){
delete koszykForm;
loginForm->setVisible(true);
this->close();
}



